/*
 * jlb
 */
package com.jlb.user.service;

import com.jlb.core.base.BaseSV;
import com.jlb.user.entity.UserGroup;
import com.jlb.user.entity.UserGroupState;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 团队关系
 *
 * @author jlb
 */
public interface UserGroupSV extends BaseSV<UserGroup, Long> {


    /**
     * 加载一个对象UserGroup
     *
     * @param id @param userCode 用户编码@param preUserCode 上级编码
     * @return UserGroup
     */
    UserGroup load(java.lang.Long id, java.lang.String userCode, java.lang.String preUserCode);

    /**
     * 加载一个对象UserGroup 通过id
     *
     * @param id
     * @return UserGroup
     */
    UserGroup loadById(java.lang.Long id);

    /**
     * 加载一个对象UserGroup 通过userCode
     *
     * @param userCode 用户编码
     * @return UserGroup
     */
    UserGroup loadByUserCode(java.lang.String userCode);

    /**
     * 加载一个对象UserGroup 通过preUserCode
     *
     * @param preUserCode 上级编码
     * @return UserGroup
     */
    UserGroup loadByPreUserCode(java.lang.String preUserCode);


    /**
     * 根据主键id,oldStates 共同更新 UserGroup 的状态到newState状态
     *
     * @param id
     * @param newState  新状态
     * @param oldStates 旧状态集合
     */
    void updateStateById(java.lang.Long id, UserGroupState newState, UserGroupState... oldStates);

    /**
     * 根据主键userCode,oldStates 共同更新 UserGroup 的状态到newState状态
     *
     * @param userCode  用户编码
     * @param newState  新状态
     * @param oldStates 旧状态集合
     */
    void updateStateByUserCode(java.lang.String userCode, UserGroupState newState, UserGroupState... oldStates);

    /**
     * 根据主键preUserCode,oldStates 共同更新 UserGroup 的状态到newState状态
     *
     * @param preUserCode 上级编码
     * @param newState    新状态
     * @param oldStates   旧状态集合
     */
    void updateStateByPreUserCode(java.lang.String preUserCode, UserGroupState newState, UserGroupState... oldStates);

    /**
     * 根据主键id 更新 UserGroup 的状态到另一个状态
     *
     * @param id
     * @param state 状态
     */
    void updateById(java.lang.Long id, UserGroupState state);

    /**
     * 根据主键userCode 更新 UserGroup 的状态到另一个状态
     *
     * @param userCode 用户编码
     * @param state    状态
     */
    void updateByUserCode(java.lang.String userCode, UserGroupState state);

    /**
     * 根据主键preUserCode 更新 UserGroup 的状态到另一个状态
     *
     * @param preUserCode 上级编码
     * @param state       状态
     */
    void updateByPreUserCode(java.lang.String preUserCode, UserGroupState state);


    /**
     * 删除对象UserGroup
     *
     * @param id @param userCode 用户编码@param preUserCode 上级编码
     * @return UserGroup
     */
    void delete(java.lang.Long id, java.lang.String userCode, java.lang.String preUserCode);


    /**
     * 查询UserGroup分页
     *
     * @param userGroup 团队关系
     * @param offset    查询开始行
     * @param limit     查询行数
     * @return List<UserGroup>
     */
    List<UserGroup> list(UserGroup userGroup, int offset, int limit);

    int count(UserGroup userGroup);

    /**
     * 查询UserGroup分页
     *
     * @param id     * @param userCode  用户编码* @param preUserCode  上级编码
     * @param offset 查询开始行
     * @param limit  查询行数
     * @return List<UserGroup>
     */
    List<UserGroup> list(java.lang.Long id, java.lang.String userCode, java.lang.String preUserCode, int offset, int limit);

    int count(java.lang.Long id, java.lang.String userCode, java.lang.String preUserCode);


    /**
     * 查询UserGroup列表
     *
     * @param preUserCode 上级用户编码
     * @return List<UserGroup>
     */
    List<UserGroup> listMyGroup(@Param("preUserCode") java.lang.String preUserCode);

}
